package pl.cezary.butler.walili.server.db.tasks;

import pl.cezary.butler.walili.server.Server;

/**
 *  <p style="margin-top: 0">
 *    Obiekt niewidoczny w procesach klienta, powinien byc uzywany do 
 *    identyfikacji uzytkownika wszedzie poza procesem logowania
 *    Powinna wystepowac zaleznosc 
 *    <code>
 *      UserId id1,id2;
 *      User   user1,user2;
 *      ...
 *      id1 == id2 wtw. user1 == user2
 *    </code>
 *      </p>
 */
// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.F655F8B7-3040-3D2F-28D0-65F7B11E7AE1]
// </editor-fold> 
public abstract class IUserId extends pl.cezary.butler.walili.server.UserId {

    //static final long serialVersionUID = -2769522470250512298L;//TODO wygenerowac nowe

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.EFE0FB90-5827-85B2-8E1E-12DCDC8457D1]
    // </editor-fold> 
    /**
     * Metoda pozwalajaca na pobranie id z obiektu
     * @return
     */
    public abstract int getId();

    public int compareTo(Object o) {
        IUserId parm = (IUserId) o;
        return getId() - parm.getId();
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof IUserId) {
            return ((IUserId) o).getId() == getId();
        }
        return false;
    }

    @Override
    public int hashCode() {
        int hash = (121 * getId()) % 10000;
        return hash;
    }

    @Override
    public String toString() {
        return "" + getId();
    }
}
